MySQL错误illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT)解决方法
  qNufQyMQglJ5 2023年11月02日 28 0

1.执行mysql存储过程,提示:

illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT)

2.尝试更改数据库的字符串

图片.png 没有解决问题

我想存储过程当中设计的两个表都是在同一个数据库下,按道理来说字符集是相同的。

3.修改sql,使用完全限定名

原来的sql如下,插入表没有使用完全限定名:

DELIMITER //

CREATE PROCEDURE generate_data()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE random_apply_no VARCHAR(50);
    
    WHILE i <= 10000 DO
        SET random_apply_no = CONCAT('APPLY_', LPAD(i, 4, '0'));

        -- 生成插入数据的SELECT子句,并直接插入到user_base表中
        INSERT INTO user_base (id, apply_no, batch_date, car_no, created_date, due_bill_no, hash_key, id_no, id_type, last_modified_date, phone, project_no, remark, sex, user_id, user_name, version)
        SELECT
            i,
            random_apply_no,
            CURDATE(),
            CONCAT('CAR_', LPAD(i, 4, '0')),
            NOW(),
            random_apply_no,
            MD5(CONCAT('ID_', LPAD(i, 4, '0'))),
            CONCAT('ID_', LPAD(i, 4, '0')),
            'IDENTITY',
            NOW(),
            CONCAT('PHONE_', LPAD(i, 4, '0')),
            'WS10043190001',
            NULL,
            IF(i % 2 = 0, 'MALE', 'FEMALE'),
            CONCAT('USER_', LPAD(i, 4, '0')),
            CONCAT('USER_', LPAD(i, 4, '0')),
            NULL
        FROM dual
        WHERE NOT EXISTS (
            SELECT 1 FROM user_base WHERE apply_no = random_apply_no
        )
        LIMIT 10;

        -- 生成插入数据的SELECT子句,并直接插入到user_bank_card表中
        INSERT INTO user_bank_card (id, user_id, id_no, bank_name, bank_code, bank_card_no, phone, version, created_date, last_modified_date, project_no, due_bill_no, agreement_no, apply_no, account_name, is_default, src_req_sn)
        SELECT
            i,
            CONCAT('USER_', LPAD(i, 4, '0')),
            CONCAT('ID_', LPAD(i, 4, '0')),
            CONCAT('BANK_', LPAD(i, 4, '0')),
            CONCAT('BANK_CODE_', LPAD(i, 4, '0')),
            CONCAT('BANK_CARD_', LPAD(i, 4, '0')),
            CONCAT('PHONE_', LPAD(i, 4, '0')),
            NULL,
            NOW(),
            NOW(),
            'WS10043190001',
            random_apply_no,
            CONCAT('AGREEMENT_', LPAD(i, 4, '0')),
            random_apply_no,
            CONCAT('ACCOUNT_', LPAD(i, 4, '0')),
            1,
            CONCAT('REQ_', LPAD(i, 4, '0'))
        FROM dual
        WHERE NOT EXISTS (
            SELECT 1 FROM user_bank_card WHERE apply_no = random_apply_no
        )
        LIMIT 10;

        SET i = i + 10;
    END WHILE;
END //

DELIMITER ;

修改sql:

DELIMITER //

CREATE PROCEDURE generate_data2()
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE random_apply_no VARCHAR(50);
    
    WHILE i <= 10000 DO
        SET random_apply_no = CONCAT('APPLY_', LPAD(i, 4, '0'));

        -- 生成插入数据的SELECT子句,并直接插入到user_base表中
        INSERT INTO acc_loan.user_base (id, apply_no, batch_date, car_no, created_date, due_bill_no, hash_key, id_no, id_type, last_modified_date, phone, project_no, remark, sex, user_id, user_name, version)
        SELECT
            i,
            random_apply_no,
            CURDATE(),
            CONCAT('CAR_', LPAD(i, 4, '0')),
            NOW(),
            random_apply_no,
            MD5(CONCAT('ID_', LPAD(i, 4, '0'))),
            CONCAT('ID_', LPAD(i, 4, '0')),
            'IDENTITY',
            NOW(),
            CONCAT('PHONE_', LPAD(i, 4, '0')),
            'WS10043190001',
            NULL,
            IF(i % 2 = 0, 'MALE', 'FEMALE'),
            CONCAT('USER_', LPAD(i, 4, '0')),
            CONCAT('USER_', LPAD(i, 4, '0')),
            NULL
        FROM dual
        WHERE NOT EXISTS (
            SELECT 1 FROM user_base WHERE apply_no = random_apply_no
        )
        LIMIT 10;

        -- 生成插入数据的SELECT子句,并直接插入到user_bank_card表中
        INSERT INTO acc_loan.user_bank_card (id, user_id, id_no, bank_name, bank_code, bank_card_no, phone, version, created_date, last_modified_date, project_no, due_bill_no, agreement_no, apply_no, account_name, is_default, src_req_sn)
        SELECT
            i,
            CONCAT('USER_', LPAD(i, 4, '0')),
            CONCAT('ID_', LPAD(i, 4, '0')),
            CONCAT('BANK_', LPAD(i, 4, '0')),
            CONCAT('BANK_CODE_', LPAD(i, 4, '0')),
            CONCAT('BANK_CARD_', LPAD(i, 4, '0')),
            CONCAT('PHONE_', LPAD(i, 4, '0')),
            NULL,
            NOW(),
            NOW(),
            'WS10043190001',
            random_apply_no,
            CONCAT('AGREEMENT_', LPAD(i, 4, '0')),
            random_apply_no,
            CONCAT('ACCOUNT_', LPAD(i, 4, '0')),
            1,
            CONCAT('REQ_', LPAD(i, 4, '0'))
        FROM dual
        WHERE NOT EXISTS (
            SELECT 1 FROM user_bank_card WHERE apply_no = random_apply_no
        )
        LIMIT 10;

        SET i = i + 10;
    END WHILE;
END //

DELIMITER ;

执行成功!

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  xaeiTka4h8LY   2024年05月31日   50   0   0 MySQLSQL
  xaeiTka4h8LY   2024年05月31日   46   0   0 MySQL数据库
  xaeiTka4h8LY   2024年05月17日   54   0   0 数据库JavaSQL
  xaeiTka4h8LY   2024年05月17日   54   0   0 数据库SQL
  xaeiTka4h8LY   2024年05月17日   38   0   0 MySQL数据库
  xaeiTka4h8LY   2024年05月31日   41   0   0 数据库mongodb
qNufQyMQglJ5