[英]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。
在许多地方需要说明编码:
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.