Bug #29745 | LENGTH(binary_field) with select from (select table) as tmp_tbl don't working | ||
---|---|---|---|
Submitted: | 12 Jul 2007 3:03 | Modified: | 29 Mar 2011 18:58 |
Reporter: | Roberto Spadim (Basic Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Data Types | Severity: | S1 (Critical) |
Version: | 5.1.20 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | qc |
[12 Jul 2007 3:03]
Roberto Spadim
[12 Jul 2007 3:22]
Roberto Spadim
see that substring is ok the problem is select * from (select sql) as tmp_tbl when the "table" is create the type of substring isn't BYNARY, it's a text!
[13 Jul 2007 15:46]
Valeriy Kravchuk
Thank you for a bug report. Sorry, but where is the bug here? mysql> CREATE TABLE /*!32312 IF NOT EXISTS*/ `log_n_channels` ( -> `datahora` decimal(17,6) NOT NULL DEFAULT '0.000000', -> `value` longblob NOT NULL, -> PRIMARY KEY (`datahora`) -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.01 sec) mysql> select *,length(valor) from( -> SELECT datahora, -> SUBSTRING(value,0*8+1,8) AS valor, -> length(SUBSTRING(value,0*8+1,8)) AS valor2, -> length(value) -> FROM log_n_channels -> WHERE -> datahora<1184122800 AND -> SUBSTRING(value,0*8+1,8)!=(CHAR(128) || CHAR(0) || CHAR(0) || CHAR(0) || CHAR(0) || -> CHAR(0) || CHAR(0) || CHAR(0)) AND -> LENGTH(value)>=0*8+8 -> -> ) as tmp_tbl; Empty set (0.01 sec) mysql> create table ttttt as select *,length(valor) from( -> SELECT datahora, -> SUBSTRING(value,0*8+1,8) AS valor, -> length(SUBSTRING(value,0*8+1,8)) AS valor2, -> length(value) -> FROM log_n_channels -> WHERE -> datahora<1184122800 AND -> SUBSTRING(value,0*8+1,8)!=(CHAR(128) || CHAR(0) || CHAR(0) || CHAR(0) || CHAR(0) || -> CHAR(0) || CHAR(0) || CHAR(0)) AND -> LENGTH(value)>=0*8+8 -> -> ) as tmp_tbl; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> select version(); +-------------+ | version() | +-------------+ | 5.1.21-beta | +-------------+ 1 row in set (0.00 sec) mysql> show create table ttttt\G *************************** 1. row *************************** Table: ttttt Create Table: CREATE TABLE `ttttt` ( `datahora` decimal(17,6) NOT NULL DEFAULT '0.000000', `valor` varbinary(8) NOT NULL DEFAULT '', `valor2` bigint(10) NOT NULL DEFAULT '0', `length(value)` bigint(10) NOT NULL DEFAULT '0', `length(valor)` int(10) NOT NULL DEFAULT '0' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 1 row in set (0.00 sec) So, making varbinary(8) out of SUBSTRING(value,0*8+1,8) where value is of type longblob is a bug? But you'll get the same without select * from (select sql) t. This looks like reasonable based on the manual, http://dev.mysql.com/doc/refman/5.0/en/blob.html: "In most respects, you can regard a BLOB column as a VARBINARY column that can be as large as you like."
[13 Jul 2007 17:16]
Roberto Spadim
"Thank you for a bug report. Sorry, but where is the bug here?" check: if you do: select * from ( select blob_field_with_binary_values_like_chr_0_and_others from table ) as tmp_tbl you don't get value of blob the blob is truncated at the first chr(0) since it's a blob, it couldn't be converted to a string (text), see what happen with strings: select * from (select "123" || char(0) || "123") as asdf this will return "123" and not the concat of "123" chr(0) and "123" if you insert "123" || char(0) || "123" into a blob field and execute select blob_field from table you get "123" || char(0) || "123"
[16 Jul 2007 6:41]
Valeriy Kravchuk
Sorry, but I still do not understand what are you complaning about. I tried to create a simple test based on your last comment. Please, check it: openxs@linux:~/dbs/5.1> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.21-beta Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> create table tblob (c1 blob); Query OK, 0 rows affected (0.03 sec) mysql> insert into tblob values(0x61626300616263); Query OK, 1 row affected (0.01 sec) mysql> select c1, length(c1) from tblob; +---------+------------+ | c1 | length(c1) | +---------+------------+ | abc abc | 7 | +---------+------------+ 1 row in set (0.00 sec) mysql> select c1, length(c1) from (select * from tblob) tmp; +---------+------------+ | c1 | length(c1) | +---------+------------+ | abc abc | 7 | +---------+------------+ 1 row in set (0.01 sec) Looks like I missed some details. Please, explain me what's wrong with my test above.
[16 Aug 2007 23:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
[29 Mar 2011 18:58]
Roberto Spadim
nice working in 5.5