我有一个156个字符的多字节文本,以UTF-8
格式编码,并通过PHP函数mb_strlen($text, 'UTF-8')
验证其长度为156。我本来希望能用VARCHAR(156)
来存储所有的数据。但有相当一部分文字被删节了。
这是我的原文:
위키백과, 백과사전.
대수(λ-,λ-)는함。1930年。함수s(x,y)=xx+입력x것이다。x↦x와年
↦y는변수의이름은。또한(x,y)↦xx+yy와(u,v)↦uu+v*v는123456
这是我在MySQL中得到的:
위키백과, ë°±ê³¼ì‚¬ì „.
嫒嫒嫒嫒嫒嫒嫒嫒(Î-,lambda-)嫒嫒嫒嫒。1930年。í•ìˆs(x,y)=x*x+
ììèèèèèèèèèèèèèè。x–xìììì
这是在我的网页上查询时生成的:
위키백과, 백과사전.
대수(λ-,λ-)는함。1930年。함수s(x,y)=x*x+입력x것이다。x↦x와年
↦y는변수
堆栈上也有一个类似的question溢出,但似乎不能解决我的问题。请注意,表CHARSET=utf8
排序规则已更改为UTF-8, General CI
,列排序规则使用表默认值。我使用MySQL版本5.5.14,系统变量如下所示:
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+--------------------------+----------------------------------------+
更新:
在按照Homer6的建议在PHP脚本上运行
mysqli_query($cxn, "SET NAMES utf8")
之后,它确实接受了完整的156个字符,并按照我的原始文本呈现。但现在我的网页上生成的内容变成:
????, ????. ??(? -,兰姆达-??. 1930年?? ?. ??s(x,y)=xx+??x轴
???.x吗?x?是吗?是吗???? ???. ??(x,y)?xx+yy?(u,v)?uu公司+
v*v?.123456号
有人能帮我吗?
最佳答案
你能试着把尺寸扩大两倍到624吗?我认为大小是字节,而不是字符。UTF-8可以在1到4字节之间。
见http://unicode.org/faq/utf_bom.html
还有,你准备好了吗
SET NAMES 'utf8';
在运行查询之前?
或者,对于韩国人,如果你设置
mysql_query( 'SET NAMES euckr_korean_ci' );
在你询问之前?
http://dev.mysql.com/doc/refman/5.1/en/charset-asian-sets.html