当每个条目都适合中等文本大小的字段时,使用MySQL长文本大小的字段有什么缺点?
我之所以要问的原因是因为我有一些长文字大小的字段,最近意识到它们太大了,但后来因为"有什么危害?"而激励自己做出微小的变化.因此问题.
我正在使用命令行界面(不是GUI客户端)在MySQL中的表上执行SELECT查询:
SELECT*FROM blog_entry;
blog_entry的一个字段是'longtext'类型,是一段很长的文本,当结果显示在我的终端中时,行的显示需要多行.这导致显示器的丑陋混乱,其中列不容易看到.我可以在SELECT查询中使用哪种技术来限制每个字段显示的字符数,以便打印的行结果不会溢出到新行?
如果您需要澄清,请告诉我 - 我会做出回应
我正在开发一个多语言的PHP Web应用程序,我有很长的( - )文本,我需要用gettext进行翻译.这些是电子邮件模板(通常很短,但仍有几行)和视图模板的一部分(较长的描述性文本块).这些文本将包括一些简单的HTML(强调粗体/斜体,可能是这里或那里的链接).模板是PHP脚本,其输出被捕获.
问题是gettext对于处理较长的文本似乎非常笨拙.较长的文本通常会比短文本有更多的变化 - 我可以更改msgid并确保在所有翻译中更新它(当msgid很长时可能是很多工作并且非常容易出错),或者我可以保留msgid保持不变并仅修改翻译(这会在模板中留下误导性的过时文本).另外,我已经看到了反对在gettext字符串中包含HTML的建议,但是避免它会将一个自然文本分成很多块,这将是翻译和重新组合的更大噩梦,我也看到了建议不必要的将gettext字符串拆分成单独的msgids.
我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境分离外部子模板中的那些块,并且只包括当前语言环境的那个.缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的转换工作分开.
由于此应用程序将在未来用作其他应用程序的起点,因此我试图提出长期的最佳方法.在这种情况下,我需要一些关于最佳实践的建议.你是如何实施类似案件的?什么结果发挥作用,结果是一个坏主意?
我的一个实体Machinery
有一个String
叫做的财产notes
.JPA 2-Hibernate为我生成模式,在我的例子中,RDBMS是MySQL.
notes
是作为VARCHAR(255)
列创建的,这是正确的.
用户开始创建记录并且所有工作都完美无缺,但随后一些用户会收到臭名昭着的Data too long for column "notes"
错误.
那个领域没有足够的空间供用户的机器笔记!好的,没问题.让我们改变架构!
所以,我打开我的实体类并将我的属性更改为:
@Column(length=1000000)
@Lob
private String notes;
Run Code Online (Sandbox Code Playgroud)
顺便persistence.xml
说一句,我声明:
<property name="hibernate.hbm2ddl.auto" value="update" />
Run Code Online (Sandbox Code Playgroud)
应用程序重启后,我很高兴Hibernate正在改变我的notes
专栏LONGTEXT
(对我来说已经足够了).
所以我首先尝试使用我的应用程序来创建一个新的"长期记录"记录,我仍然是错误"数据太长",虽然LONGTEXT
现在是.
然后,我尝试INSERT
从MySQL命令行做一个原始的,它的工作原理!我可以在该字段中插入长音符!
最后,我DROP
在我的本地/分期DB模式,改变hibernate.hbm2ddl.auto
在persistence.xml
给create
和它的作品.
JPA是否仍然认为它是一个VARCHAR
?它是否有某种缓存或存储架构信息的某个位置?
显然,我不能放弃我的生产数据库.那么,我该怎么做才能重置或更改列类型?
我正在使用JBossAS7 JPA 2-Hibernate.
我正在创建一个具有一些设置的应用程序,我想使用内置的PreferenceActivity或PreferenceFragment来完成工作
一些偏好有一个很长的标题,我无法缩短,而且我认为如果我本地化应用程序(翻译成多种语言),我将面临同样的问题(例如在德语中,有时会有很长的单词).
你在这种情况下得到的只是文本的开头,然后是"......"(或更少的点,这对btw没有多大意义).
例:
我知道PreferenceActivity从ListActivity扩展,所以我可以将其适配器更改为我想要的任何东西,但这将删除它的工作方式.
我也知道我可以从每个类型的首选项类扩展,使用"onCreateView"方法来引用创建的视图,然后访问它的子类,但这很奇怪,不是吗?我的意思是,它几乎就像假设它永远不会改变它的外观.
编辑:这是我尝试过的示例代码:
从每个首选项类扩展,并在每个首选项中使用:
...
@Override
protected View onCreateView(final ViewGroup parent)
{
final View view=super.onCreateView(parent);
ViewUtil.handlePreferenceTitleTextView(view);
return view;
}
...
//ViewUtil.java :
private void handlePreferenceTitleTextView(final View v)
{
final TextView titleTextView=(TextView)v.findViewById(android.R.id.title);
if(titleTextView!=null)
titleTextView.setSingleLine(false);
}
Run Code Online (Sandbox Code Playgroud)
它有效,但我不认为这是推荐的,因为Google可能会改变首选项视图的工作方式.
如何在Android上的首选项标题中处理长文本?
是否有可能使它具有椭圆形/选框(以便它将有一个动画来显示所有内容)?或者也许自动适合字体大小?或者将其设置为自动换行?还是一个水平scrollView,允许用户滚动阅读文本的其余部分?
是否可能有如何处理此类案件的惯例?也许长按一下可以看到整个文本的吐司/对话框?
android textview longtext preferenceactivity android-preferences
我试图从数据库输出一个数组到屏幕.在我的实体中:
/**
* @ORM\Column(type="array", nullable=true)
*/
private $category;
Run Code Online (Sandbox Code Playgroud)
在我的树枝模板中:
{% for category in user.profile.category %}
{{ category }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
错误: Array to string conversion in ...
我的错误在哪里?
我试图在MySQL中执行下面的查询,但每次都得到SQL错误1406数据太长时间的列错误.列数据类型是longtext.有任何想法吗?
UPDATE `my_db`.`my_table` SET `content` = '<div id="primaryContent"><div id="offices_map"></div><!-- #offices_map --><div id="offices_mapControlPanel" class="cf"><ul id="offices_continentLinkList"><li><a href="#" rel="Africa">AFRIQUE</a></li><li><a href="#" rel="Asia">ASIE</a></li><li><a href="#" rel="Australasia">AUSTRALASIE</a></li><li><a href="#" rel="Europe" id="offices_europeLink" class="current">EUROPE</a></li><li><a href="#" rel="NorthAmerica">AMERIQUE DU NORD</a></li><li class="last"><a href="#" rel="SouthAmerica">AMERIQUE DU SUD</a></li></ul><ul id="offices_mapLegend"><li id="offices_mapLegendRedPointer">Bureaux Panavision</li><li id="offices_mapLegendYellowPointer">Agents Panavision</li></ul></div><!-- #offices_mapLegend --><div id="offices_ownedOfficesContactDetails" class="cf"><h2>Bureaux Panavision</h2><ul class="cf"><li class="first"><strong>Panavision Greenford</strong> - pour l''Europe et l''Afrique - <a href="#" id="offices_linkPanavisionGreenford">Détails</a></li><li>Panavision Prague - <a href="#" id="offices_linkPanavisionPrague">Détails</a></li><li>Panavision Manchester - <a href="#" id="offices_linkPanavisionManchester">Détails</a></li><li>Panavision Alga & Cinecam - <a href="#" id="offices_linkPanavisionAlga">Détails</a></li><li>Panavision Rhône-Alpes - <a href="#" id="offices_linkPanavisionRhoneAlpes">Détails</a></li><li>Panavision Marseille - <a …
Run Code Online (Sandbox Code Playgroud) 我正在尝试建立一个订单系统,但我现在被困住了.在mysql tabel中,我在名为"bestillinger"的列中使用varchar(255),但它只能存储255个字符.所以我搜索了一下,并记得我可以使用longtext或只是文本,但现在当我尝试这样做时,我得到一个错误说:
#1170 - BLOB/TEXT column 'bestilling' used in key specification without a key length
Run Code Online (Sandbox Code Playgroud)
我试图在这里和谷歌搜索,但我没有运气.
我的MySQL表格是:
CREATE TABLE IF NOT EXISTS `bestillinger` (
`id` int(11) NOT NULL,
`bestilling` TEXT NOT NULL PRIMARY KEY,
`accepted` varchar(255) DEFAULT NULL,
UNIQUE KEY `id_bestilling` (`id`,`bestilling`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)
我使用UNIQUE KEY因为我在PHP部分使用"ON DUPLICATE KEY UPDATE".但是不要介意.
提前致谢.
不幸的是,我无法为EditText工作进行ellipsize.当文字太长时,甚至可以在文本的末尾加上三个点?它适用于TextiView,但不适用于EditText.有些想法?
android:id="@+id/ed_email_personalInfo"
android:layout_width="match_parent"
android:layout_height="55dp"
android:background="@color/transparent"
android:ellipsize="end"
android:ems="10"
android:hint="@string/email"
android:inputType="textEmailAddress"
android:maxLength="64"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:textColorHint="@color/col9a9a9a"
android:textSize="15.7sp"
Run Code Online (Sandbox Code Playgroud) 我有一个运行良好的数据库查询功能 - 除了我遇到了mysqli预处理语句和longtext字段显然已知的问题.即使通过phpMyAdmin运行查询工作正常,longtext字段总是空的,会发生什么.根据http://www.workinginboxershorts.com/php-mysqli-returns-empty-variables-from-longtext-column,将数据类型切换为文本可以解决问题.然而,在我的情况下,我真的更愿意离开这个领域,因为我可以预见这个额外空间有价值的时间.
我正在使用参数化查询,这显然是问题所在.这是我的功能:
// Bind results to an array
// $stmt = sql query, $out = array to be returned
function stmt_bind_assoc (&$stmt, &$out) {
$data = mysqli_stmt_result_metadata($stmt);
$fields = array();
$out = array();
$fields[0] = $stmt;
$count = 1;
while($field = mysqli_fetch_field($data)) {
$fields[$count] = &$out[$field->name];
$count++;
}
call_user_func_array('mysqli_stmt_bind_result', $fields);
}
// DB Query
// $query = SQL query, $params = array of parameters, $rs = whether or not a resultset is expected, $newid = whether …
Run Code Online (Sandbox Code Playgroud)