8

sql-command-line-client で select を使用しているときに文字列にスペースが表示されるのはどうすればよいですか?

私が意味するのは次のことです。3行あります。1、2、3 スペース。スペースの数を見る機会はありません。

create table foo(bar varchar(8));
insert into foo values(" "),("  "), ("   ");

select * from foo\g
+------+
| bar  |
+------+
|      |
|      |
|      |
+------+

mysql> select * from foo\G
*************************** 1. row ***************************
bar:  
*************************** 2. row ***************************
bar:   
*************************** 3. row ***************************
bar:    
3 rows in set (0.01 sec)

私が思いついた唯一のオプションは次のとおりです。

mysql> select bar, hex(bar) from foo;
+------+----------+
| bar  | hex(bar) |
+------+----------+
|      | 20       |
|      | 2020     |
|      | 202020   |
+------+----------+
3 rows in set (0.01 sec)

php の var_export のようなものがいいでしょう。

4

4 に答える 4

16

QUOTE本当にうまく機能する文字列関数(SQLステートメントで使用する引数をエスケープする)があるようです。

-- to add another tricky example
mysql> insert into foo values(" \" ' "), ("''");
Query OK, 1 row affected (0.06 sec)

mysql> select bar, quote(bar) from foo;
+-------+------------+
| bar   | quote(bar) |
+-------+------------+
|       | ' '        |
|       | '  '       |
|       | '   '      |
|  " '  | ' " \' '   |
| ''    | '\'\''     |
+-------+------------+
4 rows in set (0.00 sec)
于 2013-03-12T19:32:52.543 に答える
1

次のように、出力内のスペースを他の文字に置き換えることができます。

mysql> SELECT REPLACE('   ', ' ', '|');

+--------------------------+
| REPLACE('   ', ' ', '|') |
+--------------------------+
| |||                      |
+--------------------------+
1 row in set (0.00 sec)
于 2013-03-12T13:56:13.827 に答える
0

これがスペースの表示に関するものである場合は、文字列を格納する前に文字列をエンコードする必要があります。比較の場合は、先頭の文字列(スペース以外の前)は保持されますが、末尾の文字列は保持されません。詳細はこちら:こちら

于 2013-03-12T13:11:01.937 に答える
0

LENGTH()同様の結果を得るためにString を使用するのはどうですかphp var_export()

SELECT bar, LENGTH(bar) FROM foo;
于 2013-03-12T13:48:54.847 に答える