3

私は自分のデータベースで自分のIDを主キーとして設定し、同じIDも格納するという非常に奇妙な問題に直面しました。

+--------+
| | ID |
+--------+
| | ABC94 |
| | ABC94 |
+--------+

それらをphpmyadminから削除すると、次の削除用のクエリが生成され、1つのIDに含まれていることがわかります\r。これにより、一意になりますが、選択ビューには表示されません。IDがいつ保存されるかを確認する方法を教えてください.IDはABC94参加するだけで、 \r or \d or the like. ありがとう、

DELETE FROM `Db` WHERE `ID` = 'ABC94\r';
DELETE FROM `DB` WHERE `ID` = 'ABC94';

次のコードを試してみましたが、代わりに\使用したときに正常に機能したと思われるため、エラーが発生しました-\

SELECT SUBSTRING_INDEX( "ABC94\r",  "\", 1 )
4

1 に答える 1

2

余分な空白の可能性がある場合は、挿入前にアプリケーション コードで処理するか、 INSERT 時に RDBMS で削除する必要があります。

INSERT INTO `Db` (`ID`) VALUES (TRIM('input value'))

空白のスペースを他の印刷可能な文字に置き換えるスキームを考案しない限り、キー違反なしに既存の行を更新することはできません。

たとえば、キャリッジ リターン文字を に置き換えてxも、それらは一意のままです。

/* Global replacement of carriage returns with 'x' */
UPDATE `Db` SET `ID` = REPLACE(`ID`, '\r', 'x')

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

での試みSUBSTRING_INDEX()はほぼ有効でしたが、バックスラッシュを省略し、代わりに空の string を指定する必要がありました''

SELECT SUBSTRING_INDEX( 'ABC94\r',  '', 1 )

しかし、TRIM()上記のように使用する方が信頼性が高くなります。可能な限り、最善の方法は、入力データのソースを修正して、最初からこれらが生成されないようにすることです。

于 2012-12-27T12:34:51.393 に答える