MySQL VARCHAR的非英文字符数量更多?

时间:2014-03-10 18:36:25

标签: mysql arabic varchar

VARCHAR(15)是否意味着您在该字段中最多可以包含15个字符?如果是这样,为什么我会收到'数据太长'错误?

我将数据插入 123456789 ,没有问题,

123456789

Data too long for column 'customer_phone' at row 1

他们有相同数量的字符!

我的表定义(部分):

+-------------------+---------------+------+-----+-------------------+--------------+ | Field | Type | Null | Key | Default | Extra | +-------------------+---------------+------+-----+-------------------+---------------+ | id | int(11) | NO | PRI | NULL | auto_increment| | customer_id | int(11) | NO | MUL | NULL | | | customer_name | varchar(75) | YES | | NULL | | | customer_phone | varchar(15) | YES | | NULL | | | paid_amount | decimal(10,2) | NO | | NULL | | | paid_currency | varchar(4) | NO | MUL | NULL | | | ex_rate | decimal(8,2) | NO | | NULL | | | date_time | datetime | NO | MUL | CURRENT_TIMESTAMP | | | is_virtual | tinyint(1) | NO | | 0 | | +-------------------+---------------+------+-----+-------------------+---------------+

3 个答案:

答案 0 :(得分:0)

确保在运行插入查询之前将连接字符集设置为UTF8

您必须更改列varchar(30)的长度或将排序规则更改为UTF8

  ALTER TABLE mytable CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci

答案 1 :(得分:0)

找到字符集并确保设置为UTF8。
 这样做只需将以下内容添加到您的my.cnf文件中

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

答案 2 :(得分:0)

根据phpwact.org

  

... UTF-8是一种多字节8位编码,其中每个Unicode标量   value被映射到一到四个字节的序列。 ...

简单地说,当你使用utf8时,你的字符串可以包含一到四个字节的字符。我认为英文字符占用一个字节,而阿拉伯语/波斯字符占两个字节。

使用varchar(N)时,意味着可以插入N个字节。这意味着你可以插入N / 2个arrabic字符。

结论:如果要插入带有(N)阿拉伯语/波斯语字符的字符串,则必须选择varchar(2 * N)。

请告知我这是否有效,以及会发生什么。