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;
mysql亂碼問題
原來使用過一段時間mysql,感覺簡單方便,很好用。但是今天使用居然發生了亂碼。經過在網上搜尋,很快解決了這個問題。亂碼的最終根源就是字符集問題。主要有以下原因 1.在建立資料庫時指定字符集 create database test character set gbk 2.也可以修改data目錄中相...
mysql亂碼問題!
1 修改 my.ini mysql server instance configuration 檔案 client section 客戶端 client port 3306 mysql default character set gbk server section 服務端 mysqld defau...
mysql亂碼問題
出現亂碼是因為字元編碼方式的問題 經過實測發現需要重建資料庫才可以顯示中文 查詢當前預設編碼方式 show variables like char 避免出現亂碼 建立資料庫時不要使用預設編碼方式,create database character set utf8 collate utf8 gene...