2017-04-11 3 views
0

Wenn ich diese Abfrage in einer gespeicherten Prozedur ausführen, werden die passenden Zeilen korrekt zurückgegebenAusgabe mit Akzenten zu einer MySQL gespeicherte Prozedur

select brand from article where brand regexp '[àéëË]'; 

vorbei Aber wenn ich versuche, dies in eine dynamische Aussage zu verwandeln wie

set @s=concat('select brand from article where brand regexp \'[',argument,']\''); 
prepare stmt from @s; 
execute stmt; 

dann schlägt es fehl, wenn ich "àéëË" als Argument an die Prozedur übergebe (keine passende Zeile gefunden). Aber es funktioniert ohne Akzent ("aeE").

[Bearbeiten] Es ist auch nicht mit einem harten codierten Wert arbeitet

set @s=concat('select brand from article where brand regexp \'[àéëË]\''); 

Jede Idee? Danke

Antwort

0

Überprüfen Sie 11.1 Character Set Support in Ihrer Tabelle.

Ich kann das Problem mit den Zeichensätzen und Sortierung in der Tabelle nicht reproduzieren verwendet:

mysql> DROP PROCEDURE IF EXISTS `sp_test`; 
Query OK, 0 rows affected (0.00 sec) 

mysql> DROP TABLE IF EXISTS `_article`; 
Query OK, 0 rows affected, 1 warning (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `_article` (
    ->  `brand` VARCHAR(255) 
    ->) DEFAULT CHARACTER SET=latin1 COLLATE=latin1_bin; 
Query OK, 0 rows affected (0.00 sec) 

mysql> INSERT INTO `_article` 
    ->  (`brand`) 
    -> VALUES 
    ->  ('àéëË'), 
    ->  ('aeE'); 
Query OK, 2 rows affected (0.00 sec) 
Records: 2 Duplicates: 0 Warnings: 0 

mysql> DELIMITER // 

mysql> CREATE PROCEDURE `sp_test` (`index` TINYINT, `argument` VARCHAR(255)) 
    -> BEGIN 
    ->  SET @`query` := CONCAT('SELECT ', `index`, ' `index`, `brand` 
    '>      FROM `_article` 
    '>      WHERE `brand` REGEXP \'[', `argument`, ']\''); 
    ->  PREPARE `stmt` FROM @`query`; 
    ->  EXECUTE `stmt`; 
    ->  SET @`query` := NULL; 
    ->  DEALLOCATE PREPARE `stmt`; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

mysql> CALL `sp_test`(1, 'àéëË'); 
+-------+----------+ 
| index | brand | 
+-------+----------+ 
|  1 | àéëË  | 
+-------+----------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

mysql> CALL `sp_test`(2, 'e'); 
+-------+-------+ 
| index | brand | 
+-------+-------+ 
|  2 | aeE | 
+-------+-------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

mysql> CALL `sp_test`(3, 'á'); 
Empty set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

mysql> CALL `sp_test`(4, 'A'); 
Empty set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 

mysql> CALL `sp_test`(5, 'Ë'); 
+-------+----------+ 
| index | brand | 
+-------+----------+ 
|  5 | àéëË  | 
+-------+----------+ 
1 row in set (0.01 sec) 

Query OK, 0 rows affected (0.01 sec) 

Beispiel in Rextester.

Verwandte Themen