讓MySQL支援歐元字元

丁奇發表於2016-03-24

本文說明一下MySQL中不支援歐元字元的原因及解決方法。

 

 

1、              問題描述

mysql中插入的字串中若包含歐元字元(€),會發現該字元及以後的字串都變得“不可見”。實際上這裡並非不可見,而是根本沒有進入資料庫中。簡單描述步驟如下:

root@test 05:15:41>create table t(c char(32)) engine=innodb charset=gbk;

Query OK, 0 rows affected (0.01 sec)

 

root@test 05:16:29>insert into t values(concat(`a`, char(128), `b`));

Query OK, 1 row affected, warning (0.00 sec)

 

root@test 05:17:04>select * from t;

+——+

| c    |

+——+

| a    |

+——+

 

 

可以看到,我們試圖插入三個字元(a, €, b) 但在查詢中發現只有一個字元a.

Insert的一個warning內容為 Incorrect string value: `x80b` for column `c` at row 1

說明在插入0x80(€) 時出錯,導致後面的字元也一起被丟棄.

 

2、              原因分析

我們知道,在mysql將語句中設定的值傳給引擎時,需要先拷貝到一個臨時結構中。但拷貝字串只會以

相關文章