利用存储过程添加数据,怎样支持各种语言?(整个数据库级别的编码是latin1)CREATE TABLE Employee
(
   EmployeeId  CHAR(10)    NOT NULL,
   Name        VARCHAR(75) NOT NULL,
   CompanyName VARCHAR(75)     NULL,
   School      VARCHAR(75)     NULL,
   LastUpdate  TIMESTAMP   NOT NULL
);ALTER TABLE Employee MODIFY Name VARCHAR(75) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;ALTER TABLE Employee MODIFY CompanyName VARCHAR(75) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;ALTER TABLE Employee MODIFY School VARCHAR(75) CHARACTER SET utf8 COLLATE utf8_general_ci NULL;CREATE PROCEDURE addEmployee
(
   IN  p_EmployeeId    CHAR(10),
   IN  p_Name        VARCHAR(75),
   IN  p_CompanyName VARCHAR(75),
   IN  p_School      VARCHAR(75)
)
BEGIN
   
   #  Business logic
   REPLACE INTO Employee ( EmployeeId,
                           Name,
                           CompanyName,
                           School )
         VALUES ( p_EmployeeId,
                  p_Name,
                  p_CompanyName,
                  p_School );
   
END;

解决方案 »

  1.   

    用UTF8是最好的方式,注意,在设置好字符集后,要将记录在新的字符集下重新插入
      

  2.   

    没办法同时支持多种字符集,在使用不同的字符集时,你可以用 set names 来做connection 的字符集的切换设置。http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/12/4174186.aspx
    MySQL 中文显示乱码
      

  3.   

    但是在SQLyog中可以通过update Employee set CompanyName = N"微软" where EmployeeId="ABCEDFGHIJ";或者update Employee set CompanyName = _utf8"微软" where EmployeeId="ABCEDFGHIJ";
    更新完成后,SELECT能正确显示。
      

  4.   

    CALL addEmployee('ABCDEFGHIJ', N'姓名', N'公司', N'学校');CALL addEmployee('ABCDEFGHIJ', _utf8'姓名', _utf8'公司', _utf8'学校');但是上面的方法不行(2 row(s) affected, 3 warning(s))
    Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:000数据还是乱码。
      

  5.   

    Server默认utf8
    Database默认latin1
    Table上某些字段utf8
    现在把整个数据库的默认字符集调整到utf8,.net连接符增加charset=utf8就可以存中文,那么不更改数据库的字符集就解决不了这个问题么?
      

  6.   

    另外问问,用utf8/latin1的区别,在存英文和其他语言(比如中文),在存储空间和检索速度上有没有区别。谢谢。
      

  7.   

    show variables like 'char%';的结果character_set_client utf8
    character_set_connection utf8
    character_set_database latin1
    character_set_filesystem binary
    character_set_results utf8
    character_set_server utf8
    character_set_system utf8
    character_sets_dir /usr/share/mysql/charsets/
      

  8.   

    关键是你的数据源要和utf8相容才行,所以问题出在你的数据源上
      

  9.   

    MySQL或者其它数据,基本上不可能同时在一个字段上支持多种字符集。所以不可以在一个字段中又有GB2312,又有GBK,虽然可以使用UTF8来支持unicode 字符集。并且UTF8也支持汉字的显示。但前提是你所有插入的字符必须以UTF8编号方式插入。检查一下你数据库中的字符到底采用的什么编码方式。
    select hex(yourColumn) from table ...另外问问,用utf8/latin1的区别,在存英文和其他语言(比如中文),在存储空间和检索速度上有没有区别。
    latin1 是单字节字符
    utf8是多字节字符,一般汉字由三个字节组成。
    检索速度上当然是字节最少最快。但影响不大。
      

  10.   

    是一个asp.net项目,把整个数据库的编码改成utf8立刻没有问题,所以不太清楚问题的根结。已经打算把整个数据库编码转成utf8了。