一開始按照博文http://www.linuxidc.com/Linux/2011-05/35404.htm的做法,設定ArmLinux,不行,繼續找。。。
嘗試多種解決方案,但大多數講的都是Windows或Linux(ubuntu)的做法,說起來容易做起來難,看看我的經曆吧。。。
1、windows下操作比較方便,先實現windows下mysql中文顯示
按照http://www.linuxidc.com/Linux/2011-05/35404.htm的Windows解決方案,我實現的是utf8的字元集設定,沒有問題,O(∩_∩)~,不過有點小插曲,就是4個漢字以上就顯示亂碼,那肯定是資料長度定義短了,修改。。。
mysql>desc table_name;
...
mysql>ALTER TABLE `test`.`acquisitions` CHANGE COLUMN `unit` `unit` VARCHAR(112) NULL DEFAULT NULL ;
測試
OK!
2、在ARM下,很糾結,明明按照方法做的,
1)在QT程式的main.cpp的main函數中QTextCodec```那三句:
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- QTextCodec *codec = QTextCodec::codecForName("UTF-8");
- QTextCodec::setCodecForCStrings(codec);
- QTextCodec::setCodecForTr(codec);
- MainWindow w;
- w.show();
- return a.exec();
- }
2)在你的程式碼設定資料庫後添加一句: db.exec("SET NAMES 'Latin1'"); //直接使用資料庫的latin1編碼
偏偏不行,可能是編譯的ARM版的MySQL與ubuntu的不太一樣,看看它的字元集吧:
查看MySQL當前的字元集設定:
mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)
原來字元集預設的不是latin1,那咋麼辦?看一個博文這樣說,
。。。。。。。。。。。。。。。。。。。。。。。。。。。引用部分。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
如果character_set_client、character_set_connection、 character_set_results之前被修改成了utf8,
就要在linux下修改my.cnf檔案(其它被修改成utf8好像沒關係),該檔案位置一般是 /etc/mysql/my.cnf
開啟my.cnf後,
找到用戶端配置[client] 在下面添加
default-character-set=latin1 設定預設字元集為latin1
在找到[mysqld] 添加
default-character-set=latin1 預設字元集為latin1
init_connect='SET NAMES latin1' (設定串連mysql資料庫時使用latin1編碼,以讓mysql資料庫為latin1運行)
修改好後,重新啟動mysql 即可,查詢一下show variables like 'character%';是否與 圖一 一樣。
。。。。。。。。。。。。。。。。。。。。。。。end。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
設定後,依然不行。。。。苦悶ing
思變:既然不行,那就全部按照utf8來設定試試,那如何設定呢?
嘗試1、在命令列下set character_set_client =utf8。。。其他依次設定,設定表字元集alter TABLE user_info DEFAULT CHARACTER SET utf8;測試,不行,再進命令列,查看字元集,mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | gb2312 |
| character_set_connection | gb2312 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | gb2312 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)
居然沒有變。。。。
嘗試2、執行mysql>set NAMES ‘utf8’;然後再執行查看字元集
mysql> set NAMES 'utf8';
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'character%';
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | gb2312 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | gb2312 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/mysql/charsets/ |
+--------------------------+----------------------------------------+
8 rows in set (0.00 sec)
變化的 是character_set_client、character_set_connection、 character_set_results,能不能試試全部修改,但是推出後並沒有儲存,怎麼辦?具體儲存方法沒有找到,也不知道為什麼執行了,下次再進入資料庫,又恢複了原來的字元集,我們可以換種思路,在每次運行時,都全部設定,
既然在資料庫連接成功後,執行了
db.exec("SET NAMES 'utf8'");
何嘗不再執行修改
db.exec("set character_set_database =utf8");
db.exec("set character_set_server =utf8");
這樣各變數的字元集全部設定了,再不行,再找方法,就要不厭其煩的嘗試,才可以找到答案,這可能就是笨鳥先飛的法寶吧~呵呵,廢話了。。。
這樣設定,成功了!!!