我指定db应该是utf8mb4
:
CREATE DATABASE IF NOT EXISTS MY_DB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
然后我运行一个脚本来创建表并从一些平面文件中填充表。这些文件包含latin1
个字符,并使用latin1
编码打开。
db的表在models.py
个文件中指定,因为这是一个Django
应用程序。 Django文档说你像我在创建数据库时那样指定编码。
数据加载,但在MySQL Workbench中,表格似乎是' latin1':
SELECT
`tables`.`TABLE_SCHEMA`,
`tables`.`TABLE_NAME`,
`tables`.`TABLE_COLLATION`,
`collations`.`character_set_name`
FROM
`information_schema`.`TABLES` AS `tables`,
`information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
`tables`.`table_schema` = DATABASE()
AND `collations`.`collation_name` = `tables`.`table_collation`
;
为什么表格显示为latin1
,如何制作utf8mb4
?
答案 0 :(得分:0)
尝试使用以下查询。
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
答案 1 :(得分:0)
原来在两个地方调用了#define kEcardURL @"https://example.com/mobile/services/ecard/"
- (void)doSomething {
//Params Configuration
NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:
[oauth.userData valueForKey:@"wsuserid"], @"token",
nil];
NSString *path = @"fotoCartao";
NSData* params = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@", kEcardURL, path]];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[urlRequest setHTTPBody:params];
NSURLSessionDataTask *dataTask = [[self session] dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
if ([data length] > 0 && error == nil) {
if ([httpResponse statusCode] == 200) {
//do stuff
}
}
}];
[dataTask resume];
}
}
- (NSURLSession *)session {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// Session Configuration
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
// Initialize Session
_session = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
});
return _session;
}
命令。我正在编辑第二个,因为数据库已经存在,所以没有使用它。当我将CREATE DATABASE...
添加到第一个CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
命令时,表格得到了正确的字符集。
答案 2 :(得分:0)
桌子的字符集和整理并不重要;它只是添加新列时使用的默认值。重要的是列的设置。用这个来找出:
SHOW CREATE TABLE mytable
(有一种方法可以使用information_schema
。COLUMNS
集中获取信息。)
如何加载数据?如果您(或代表您使用Django)使用LOAD DATA INFILE
,那么它是否有CHARACTER SET
子句?它需要说明数据的编码是什么。这 not 需要与数据将进入的列的字符集相同。
Django进一步注意到:
DATABASES = { 'default':{ 'ENGINE':'django.db.backends.mysql', ... 'OPTIONS':{ 'charset':'utf8mb4', 'use_unicode':是的,}, }, } 的my.cnf:
的[mysqld] 字符集服务器= utf8mb4 默认自动分页= utf8mb4_unicode_ci
[客户] 默认字符集= utf8mb4