【问题标题】:Database Collation in the stored procedure存储过程中的数据库排序规则
【发布时间】:2018-08-02 20:32:51
【问题描述】:

我有一个包含创建存储过程的过程的转储:

DELIMITER ;
/*!50003 SET character_set_client  = utf8 */ ;
/*!50003 SET character_set_results = utf8 */ ;
/*!50003 SET collation_connection  = utf8_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
CREATE DEFINER=`sys`@`%` PROCEDURE `test`(_Test bigint )
BEGIN
    select * from test;
END ;;
DELIMITER ;

但是,当我表演时:

SHOW PROCEDURE STATUS WHERE Name LIKE '%test%'\G;

我明白了:

*************************** 1. row ***************************
                  Db: TEST
                Name: test
                Type: PROCEDURE
             Definer: root@%
            Modified: 2018-02-22 23:25:27
             Created: 2018-02-22 23:25:27
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci

Database Collation为什么是latin1_swedish_ci

【问题讨论】:

  • 运行存储过程或恢复备份时出现错误?

标签: mysql stored-procedures collation


【解决方案1】:

在你的表测试(和所有其他表)中必须改变字符集:

alter table test character set utf8mb4;

还有包含文本的字段:

alter table test change varchar_column varchar_column varchar(XX) 
                                        character set utf8mb4;

【讨论】:

    【解决方案2】:

    对于 Emoji,您需要 utf8mb4,而不是 utf8latin1

    我认为Database Collation 不是问题。

    【讨论】:

      猜你喜欢
      • 2011-03-02
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 2023-04-04
      • 1970-01-01
      相关资源
      最近更新 更多