【问题标题】:Can't insert a unicode glyph in mysql无法在 mysql 中插入 unicode 字形
【发布时间】:2011-07-11 22:35:30
【问题描述】:

使用此查询:

UPDATE  `arg`.`arg_currency` SET  `symbol` =  '????' WHERE  `arg_currency`.`id` =2 LIMIT 1 ;

我收到此错误:

警告:#1366 字符串值不正确: '\xF0\x90\x80\xA4' 列'符号' 在第 1 行

symbol 列是 CHAR(1) utf8_roman_ci,但我都尝试将排序规则更改为 _general 和 _unicode,并将字符更改为 4,但我仍然遇到相同的错误。

我做错了什么?

(我都尝试通过自定义 php 代码和 phpmyadmin 插入它)

【问题讨论】:

  • 角色从何而来?
  • @Pekka:这是一个线性B字符fileformat.info/info/unicode/char/10024/index.htm
  • @Lo 是的,我自己找到了。奇怪,对我来说看起来像是一个完美的 utf-8 字符。您可以尝试将类型设置为varchar 吗?只是为了排除可能性
  • @Lo:你的前端是什么?让前端/应用程序将其转换为数字,然后存储该数字...然后在检索时对其进行编码..

标签: mysql unicode collation


【解决方案1】:

正如@CarpeNoctumDC 指出的那样,这个问题解释了问题:

MySQL don't want to store unicode character

MySQL 仅支持来自基本多语言平面 (0x0000 - 0xFFFF) 的字符。

如果这架飞机你的角色不在。

在您的情况下,我会通过将字符存储为数字实体来解决它。 htmlentities() 指定 UTF-8 编码应该能够实体化它,例如。不,它没有。

PHP 手册的This function in the User Contributed Notes 对我有用:它将字符转换为数字实体。

echo utf8tohtml("?", true); // echoes 𐀤

【讨论】:

  • 哦,更好的是,我会把它存储为一个 4 字节的无符号整数!谢谢:)
  • +1:但我的实际反应是什么!? MySQL 不支持来自 16 个补充平面中的任何一个的字符吗?啊,现在看到 MySQL 5.5 和更高版本支持 UTF-16 和 UTF-8。 dev.mysql.com/doc/refman/5.5/en/charset-unicode.html
  • @dalle 是的,我也很困惑!我也看不出真正的原因。
【解决方案2】:

这个'?' 是什么编码的??首先尝试使用iconv()http://php.net/manual/en/function.iconv.php在php中将您的编码转换为mysql表编码

更新:

看起来'?' 被即时编码为字符串\xF0\x90\x80\xA4, 如果您的字段是 CHAR(1),则它不适合并返回错误 - 需要找出它被编码的原因。

【讨论】:

  • 这是一个有效的 UTF-8 字符:utf8-chartable.de/…
  • @Dobiatowski nope:UTF-8 char(1) 将保存一个 UTF-8 字符,即最多 4 个字节。此外,OP 声明他已经尝试将字段的宽度设置为 4
  • @Pekka 但我想当您将字段类型更改为 varchar(16) 时,它将被保存但不是作为 UTF char 而是作为编码符号字符串
  • @Dobiatowski 我不这么认为——为什么会这样?不过,如果这样做的话,那就太好了。显然,没有办法在本地存储这些字符。 (见副本)
  • @Pekka 你是对的,我虽然它被编码为字符串。
猜你喜欢
  • 2013-07-05
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
相关资源
最近更新 更多