繁体   English   中英

MySQL(和PHP)中的特殊字符-基础

[英]Special characters in mySQL (and php) - THE BASICS

我很困惑! 最近我的网络酒店更新了php ,现在我的旧桌子以不同的方式(错误地)呈现了特殊字符。 我的表和input / output-php-pages都设置为utf-8,并且自此更新以来,php的输入也被不同地对待; 现在,我的特殊字符在进入数据库时​​已经过utf-8编码。 因此,自从发生此更改以来,当我查看phpMyAdmin中的表时,旧的插入内容具有原始(未编码)特殊字符-新帖子具有utf-8编码的字符(也很特殊)。

所以我想做的就是重写输入和输出以插入和显示非编码字符-但是我不确定在不完全跳过utf-8的情况下(在php和mySQL中)是否有可能。 但是, 是否有utf-8方法提交未编码的字符?

而且-也许从根本上讲-我需要了解可能的弊端。 我正在使用丹麦语字符,但不会使用任何其他语言(针对该项目)。 因此,如果可以使用utf-8插入和输出非编码字符, 那么我是否会遇到意外/破坏性问题?

我已经阅读了很多有关php / mySQL /特殊字符的文章,但是我还没有看到这个问题的角度。 希望我不要重复,因为在更新之前,它一直运行良好。

即使您仅使用丹麦语字符,也最好一直使用utf8。

许多地方需要说明编码:

  • HTML顶部的
  • 数据库中的列(CHARACTER SET列默认来自表,默认值来自数据库)
  • PHP代码中的编码。

CREATE TABLE ,使用DEFAULT CHARACTER SET utf8 如果您有现有的表,请大声说出来。 我们可能需要处理它们。 如果要使用丹麦语排序规则,请同时指定COLLATION utf8_danish_ci 然后(如果我没记错的话), aa将在z之后排序。 (默认值为utf8_general_ci ,它不会进行这种排序。)找出php代码中具有(或可以得到)的编码。 如果其中有带重音的文本,请执行以下操作:

$hex = unpack('H*', $text);
echo implode('', $hex)

如果您拥有utf8,则å将为C3A5 ,对于latin1则将为E5

无论表中使用哪种编码,都必须根据PHP数据中的编码来调用set_charset('utf8')或set_charset('latin1')。 随着事情在PHP和MySQL之间传递,MySQL会很乐意在latin1和utf8之间进行代码转换。 对于不同的API:

⚈  mysql: mysql_set_charset('utf8');
⚈  mysqli: $mysqli_obj->set_charset('utf8');
⚈  PDO: $db = new PDO('dblib:host=host;dbname=db;charset=UTF-8', $user, $pwd);

有关更多信息,请参见http://mysql.rjweb.org/doc.php/charcoll

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM