我在我的MySQL數據庫中的一個表中有一個VARCHAR字段。它有200個字符的限制。這在英語中工作正常,但是當輸入200個阿拉伯字符(UTF-8)時,只會存儲110個字符。MySQL字符限制中的問題
任何想法爲什麼發生這種情況,我怎麼能解決它?
我在我的MySQL數據庫中的一個表中有一個VARCHAR字段。它有200個字符的限制。這在英語中工作正常,但是當輸入200個阿拉伯字符(UTF-8)時,只會存儲110個字符。MySQL字符限制中的問題
任何想法爲什麼發生這種情況,我怎麼能解決它?
非常感謝你們,我從你的答案很多教訓。但是,我發現導致問題的原因不是MySQL,而是PHP。 PHP的子字符串函數不能很好地與阿拉伯字符串一起播放,並且很快將它們切斷,所以我只需將其刪除即可。
你能發佈鏈接到PHP bugtracker或其他文章描述這個問題? – 2011-11-10 11:08:32
這可能是由連接或客戶端字符集設置不正確引起的。
問題SHOW VARIABLES LIKE 'character_set%'
並查看character_set_connection
和character_set_client
的值是什麼。如果它們是latin1
,則需要確保更改代碼以獲取使用UTF-8的新連接。這可以通過在連接時發佈SET NAMES 'utf8'
來實現。 (您的數據庫抽象類可能會提供更改連接字符集的方法,在這種情況下,您應該這樣做)
如果確實存在問題,那麼您可能在表中存儲了錯誤編碼的數據你會想要修復。
MYSQL使鍵和UTF-8看起來是你的問題。它假定任何UTF-8字符都是3個字節(用於最壞情況的計算),所以會限制你的大小而不真正解釋原因。更多信息:
http://www.xaprb.com/blog/2006/04/17/max-key-length-in-mysql/
這將如何導致他描述的行爲? – Hammerite 2010-11-04 22:14:05
這是處理這個問題的另一個SO問題。 – 2010-11-05 12:07:38
http://stackoverflow.com/questions/1997540/mysql-varchar-lengths-and-utf-8 – 2010-11-05 12:08:24
http://stackoverflow.com/questions/1997540/mysql-varchar-lengths-and-utf-8 – 2010-11-05 12:08:59