mysql 亂碼問題



mysql 中英文插入時,出現亂碼無法插入的問題。

由於是Ubuntu的機器,mysql的配置文件是:/etc/mysql/my.cnf


設置了下配置文件my.cnf的編碼爲utf8:
[client]
default-character-set=utf8


#default-character-set=utf8  #這個太坑爹了,在mysql 5.+版本上設置,mysql直接啓動不起來了。
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
#for php
skip-character-set-client-handshake


[mysql]
default-character-set=utf8


重啓mysql 還是無法插入中文。
sudo /etc/init.d/mysql start/stop/restart


在網上搜索了半天,都是說經過上面的設置就搞定了,但是還是不行。於是直接手動修改使用的mysql數據庫編碼:

ALTER DATABASE buildtools DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

這樣數據庫的默認編碼就成了utf8了,

通過下面命令可以查看當前數據庫使用的編碼情況:


SHOW CREATE DATABASE db_name;
show variables like 'collation%';
show variables like 'char%';


再刪除之前創建的所有數據庫,重新運行python manager syncdb 創建數據庫,所有表就都是utf8編碼了。


試着插入中文,結果還是無法插入,錯誤log有所變化:
Error:Warning: Incorrect string value: '\xE6\xB5\x8B\xE8\xAF\x95...' for column 'object_repr' at row 1


發現時django_admin_log的數據表沒有不是utf8


show create table django_admin_log;


| django_admin_log | CREATE TABLE `django_admin_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `action_time` datetime NOT NULL,
  `user_id` int(11) NOT NULL,
  `content_type_id` int(11) DEFAULT NULL,
  `object_id` longtext,
  `object_repr` varchar(200) NOT NULL,
  `action_flag` smallint(5) unsigned NOT NULL,
  `change_message` longtext NOT NULL,
  PRIMARY KEY (`id`),
  KEY `django_admin_log_6340c63c` (`user_id`),
  KEY `django_admin_log_37ef4eb4` (`content_type_id`),
  CONSTRAINT `content_type_id_refs_id_93d2d1f8` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
  CONSTRAINT `user_id_refs_id_c0d12874` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1 |

修改django_admin_log 表以及對應字段的編碼

ALTER TABLE django_admin_log DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE django_admin_log MODIFY object_repr VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
ALTER TABLE django_admin_log MODIFY object_id longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
ALTER TABLE django_admin_log MODIFY change_message longtext CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;


show create table django_admin_log;


已經修改好了。。。

| django_admin_log | CREATE TABLE `django_admin_log` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `action_time` datetime NOT NULL,
  `user_id` int(11) NOT NULL,
  `content_type_id` int(11) DEFAULT NULL,
  `object_id` longtext COLLATE utf8_unicode_ci NOT NULL,
  `object_repr` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
  `action_flag` smallint(5) unsigned NOT NULL,
  `change_message` longtext COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `django_admin_log_6340c63c` (`user_id`),
  KEY `django_admin_log_37ef4eb4` (`content_type_id`),
  CONSTRAINT `content_type_id_refs_id_93d2d1f8` FOREIGN KEY (`content_type_id`) REFERENCES `django_content_type` (`id`),
  CONSTRAINT `user_id_refs_id_c0d12874` FOREIGN KEY (`user_id`) REFERENCES `auth_user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |


再插入中文,OK。

PS: mysql 批處理。
BEGIN;
DROP TABLE `admins_email`;
DROP TABLE `admins_buildrecord`;
DROP TABLE `admins_patchpackage`;
DROP TABLE `admins_channelpackage`;
DROP TABLE `admins_package`;
DROP TABLE `admins_channelstrategy`;
DROP TABLE `admins_channel`;




COMMIT;
發佈了93 篇原創文章 · 獲贊 14 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章